package rml.controller;

import java.util.List;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import rml.model.MUser;
import rml.service.MUserServiceI;
//以前的代码是手动 implements Controller, 现在写成这样
//以前返回式handler 方法体 返回的是 ModelView, 现在也看不到了
@Controller
@RequestMapping("/muserController") // 这里相当于struts的命名空间
public class MUserController {

	private MUserServiceI muserService;

	public MUserServiceI getMuserService() {
		return muserService;
	}

	@Autowired//按理说在变量上写就可以了
	public void setMuserService(MUserServiceI muserService) {
		this.muserService = muserService;
	}
	
	@RequestMapping(value="/listUser") //设置方法对应的url
	public String listUser(HttpServletRequest request) {
		
		List <MUser> list = muserService.getAll();
		//放到页面, 是放到request域中
		request.setAttribute("userlist", list);
		//指定转发的jsp页面, 以前需要指定ModelAndView, 这个版本没有这个
		return "listUser";
	}
	
	@RequestMapping(value="/addUser")
	//这里不是太明白, MUser在页面是一个form(key/value形式), 这里如何包装为MUser呢, 自动绑定到POJO!!!! 不仅如此还可以绑定到包装的POJO
	//参数名字和POJO属性一样就立即绑定, 无论这个POJO是谁; 但是如果有多个POJO且属性重复, 绑定没有针对性
	//包装POJO应该在页面写 内部属性.变量名
	//日期前台是指定 string, 而POJO是date, 这里会出现错误, 
	//handlerAdapter? 
	//早起采用PropertyEditor来映射把字符串转化为java对象, 后来采用Converter转换器支持任意类型转换
	//默认支持request, response, session, model(也可以为map)
	public String addUser(MUser muser) {
			
		String id = UUID.randomUUID().toString();
		muser.setId(id);
		muserService.insert(muser);
		return "redirect:/muserController/listUser.do";
	}
	
	@RequestMapping(value="/deleteUser")
	public String deleteUser(String id) {
		
		muserService.delete(id);
		return "redirect:/muserController/listUser.do";
	}
	
	@RequestMapping(value="/updateUserUI")
	public String updateUserUI(String id, HttpServletRequest request) {
		
		MUser muser = muserService.selectByPrimaryKey(id);
		request.setAttribute("user", muser);
		return "updateUser";
	}

	@RequestMapping(value="/updateUser")
	public String updateUser(MUser muser) {
		
		muserService.update(muser);
		return "redirect:/muserController/listUser.do";
	}
}
